package de.hhn.pks.cb.gruppex;

public class Scanner {
	
	final private int PLUS = 0;
	final private int MINUS = 1;
	final private int MULT = 2;
	final private int DIV = 3;
	final private int POT = 4;
	final private int BRA_OP = 5;
	final private int BRA_CL = 6;
	final private int NUMBER = 7;

	final private int NOERROR = 10;
//	final private int INPUTERROR = 11;
//	final private int COMMAERROR = 12;
	
	public Scanner() {
		// standard-constructor
	}

	public void scan(String input) throws Exception {
		
		int index = 0; 
		String token; 
		
		// solange bis ende zeichen erreicht: 
		while(input.charAt(index) != '#' ) { 
			
			// wenn gelesenes Zeichen ein Leerzeichen ist, tu nichts, fange von vorn an
			if(input.charAt(index) == ' ') {
				index++; 
				continue; 
			}
			
			// wenn gelesenes Zeichen ein minus ist
			if(input.charAt(index) == '-') {
				
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + MINUS + " error: " + NOERROR); 
				
			// wenn gelesenes Zeichen ein plus ist
			} else if(input.charAt(index) == '+') {
			
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + PLUS + " error: " + NOERROR);	
				
			// wenn gelesenes Zeichen eine klammer auf ist
			} else if(input.charAt(index) == '(') {
				
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + BRA_OP + " error: " + NOERROR);
				
			// wenn gelesenes Zeichen eine klammer zu ist		
			} else if(input.charAt(index) == ')') {
			
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + BRA_CL + " error: " + NOERROR);
				
			// wenn gelesenes Zeichen ein div ist
			} else if(input.charAt(index) == '/') {
				
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + DIV + " error: " + NOERROR);
				
			// wenn gelesenes Zeichen ein mult ist
			} else if(input.charAt(index) == '*') {
				
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + MULT + " error: " + NOERROR);
						
			// wenn gelesenes Zeichen ein exp ist
			} else if(input.charAt(index) == '^') {
				
				token = String.valueOf(input.charAt(index));
				System.out.println("token: " + token + " lexem: " + POT + " error: " + NOERROR);
				
			// wenn gelesenes Zeichen eine zahl ist
			} else if(input.charAt(index) == '0' || input.charAt(index) == '1' || input.charAt(index) == '2' || input.charAt(index) == '3' || input.charAt(index) == '4' || input.charAt(index) == '5' || input.charAt(index) == '6' || input.charAt(index) == '7' || input.charAt(index) == '8' || input.charAt(index) == '9') {
				
				token = String.valueOf(input.charAt(index));
				boolean dotAlreadyUsed = false; 
				boolean lastIsDot = false; 
				
				
				while(input.charAt(index) == '0' || input.charAt(index) == '1' || input.charAt(index) == '2' || input.charAt(index) == '3' || input.charAt(index) == '4' || input.charAt(index) == '5' || input.charAt(index) == '6' || input.charAt(index) == '7' || input.charAt(index) == '8' || input.charAt(index) == '9' || input.charAt(index) == '.') {
					
					index++;
					if(input.charAt(index) == '0' || input.charAt(index) == '1' || input.charAt(index) == '2' || input.charAt(index) == '3' || input.charAt(index) == '4' || input.charAt(index) == '5' || input.charAt(index) == '6' || input.charAt(index) == '7' || input.charAt(index) == '8' || input.charAt(index) == '9') {
						token = token + String.valueOf(input.charAt(index));
						lastIsDot = false; 
					} else if(input.charAt(index) == '.' && dotAlreadyUsed == false) {
						dotAlreadyUsed = true; 
						lastIsDot = true; 
						token = token + String.valueOf(input.charAt(index));
					} else if(input.charAt(index) == '.' && dotAlreadyUsed == true) {
						throw new MultipleDotException(); 
					} else {
						index--;
						break; 
					}
					
				}
				
				if(lastIsDot) {
					throw new IllegalNumberException(); 
				}
				
				System.out.println("token: " + token + " lexem: " + NUMBER + " error: " + NOERROR);
			
			} else {
				throw new UnzulaessigesZeichenException(index, input.charAt(index));
			}
			
			index++; 
				
		}	
	}
}
